<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>

    // const obj = {
    //     name:"admin",
    //     age:18,
    //     sex:"男"
    // }

    // const target = {
    //     get name(){
    //         return obj.name
    //     },
    //     set name(val){
    //         obj.name = val
    //     }
    // }

    // const target = {};

    // for(let i in obj){
    //     target["get "+i] = function(){
    //         console.log(i, '被访问了')
    //         return obj[i]
    //     }
    //     target["set "+i] = function(val){
    //         console.log(i, '被修改成了', val)
    //         obj[i] = val
    //     }
    // }

    // ==========

    // const origin = {
    //     name:"admin",
    //     age:18,
    //     sex:"男",
    //     a:10,
    //     b:20,
    //     c:30
    // }

    // const target = {};

    // for(let i in origin){
    //     Object.defineProperty(target, i, {
    //         get:function(){
    //             // ...
    //             return origin[i];
    //         },
    //         set:function(val){
    //             // ...
    //             origin[i] = val;
    //         }
    //     })
    // }

    // console.log( target );



    // ========

    
    // const origin = {
    //     name:"admin",
    //     age:18,
    //     sex:"男",
    //     a:10,
    //     b:20,
    //     c:30
    // }

    // const ops = {}

    // for(let i in origin ){
    //     ops[i] = {
    //         get(){
    //             console.log(i, "被访问了")
    //             return origin[i]
    //         },
    //         set(val){
    //             console.log(i, "被修改成了", val)
    //             origin[i] = val
    //         }
    //     }
    // }

    // const target = {};

    // Object.defineProperties( target, ops );

    // console.log(target)


    // =========

    const obj = {};

    Object.defineProperty(obj, "name", {
        // 指定默认值，不能和get和set同时出现
        value:"admin",
        // 设置是否可被枚举，默认为false
        enumerable: true,
        // 设置是否可被修改，默认为false，不能和get和set同时出现
        writable: false
    })

    console.log(obj);
    
    console.log(obj.name);
    
    for(let i in obj){
        console.log(i, obj[i]);
    }   
    
    obj.name = "张三"
    
    console.log(obj.name);
    
    console.log(obj);





    
</script>
</html>